/**      
 * @file		BikeStore.h
 * @description			
 * @course		CSCI 123 Section 00000
 * @assignment 
 * @date		mm/dd/yyyy
 * @author		Brad Rippe (00000000) brippe@fullcoll.edu
 * @version		2.0
 */
#ifndef BIKE_STORE_H
#define BIKE_STORE_H

#include "Bike.h"
typedef Bike* BikePtr;

/**
 * This is a container of Bikes. 
 * @author Brad Rippe (brippe@fullcoll.edu)
 * @see Bike
 */
class BikeStore {
public:

	friend ostream& operator << (ostream& aOut, const BikeStore& aStore);

	/**
	 * Default Constructor
	 * @pre none
	 * @post initializes an array of 10 bikes
	 */
	BikeStore();

	BikeStore(int aSize);

	BikeStore(const Bike aBikes[], int aSize);
	
	BikeStore(const BikeStore& aBikeStore);

	~BikeStore();

	int getSize() const;

	int getCapacity() const;

	int resize();
	
	int shrink();

	bool addBike(const Bike& aBike);

	bool removeBike(const Bike& aBike);

	bool removeBike(int aIndex);

private:
	void moveBikes(int aIndex);

	BikePtr mInventory;	// inventory of bikes
	int mSize;		// stores the current number of bikes in the store
	int mCapacity;		// stores the maximum number of bikes that can be stored
};

#endif
